// Copyright 2022 a.o.smith ALL Rights Reserved
package com.liuxinlong.modules.dao;

import com.liuxinlong.modules.entity.FileManage;
import com.baomidou.mybatisplus.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 文件管理dao接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2022年2月9日
 */
public interface FileManageDao extends IService<FileManage> {
    /**
     * 查询文件管理列表
     *
     * @param queryParam 查询条件
     * @return 文件管理列表
     */
    List<FileManage> pageFileManageList(Map<String, Object> queryParam);

    /**
     * 查询文件管理记录条数
     *
     * @param queryParam 查询参数
     * @return 文件管理记录条数
     */
    int getFileManageCount(Map<String, Object> queryParam);

    /**
     * 新增文件管理记录
     *
     * @param fileManage 文件管理记录
     */
    void addFileManage(FileManage fileManage);

    /**
     * 修改文件管理记录
     *
     * @param fileManage 文件管理记录
     */
    void updateFileManage(FileManage fileManage);

    /**
     * 删除文件管理记录
     *
     * @param id 文件管理记录id
     */
    void deleteFileManage(String id);

    /**
     * 查询业务相关文件管理列表
     *
     * @param businessId 业务id
     * @return 文件管理列表
     */
    List<FileManage> queryFileManageList(String businessId);

    /**
     * 批量修改文件关联业务id
     *
     * @param fileIds    文件id
     * @param businessId 业务id
     */
    void batchUpdateBusinessFile(String[] fileIds, String businessId);

    /**
     * 获取文件map
     *
     * @param businessType 业务类型
     * @return 文件map
     */
    Map<String, Map<String, String>> getFileMap(int businessType);

    /**
     * 获取文件map
     *
     * @param fileIdList 文件id
     * @return 文件map
     */
    Map<String, Map<String, Object>> getFileMapByIds(Set<String> fileIdList);

    /**
     * 获取文件map
     *
     * @param fileIdList 远端文件id
     * @return 文件map
     */
    Map<String, Map<String, Object>> getFileMapByCloudIds(Set<String> fileIdList);

    /**
     * 查询文件管理列表
     *
     * @param fileIds 业务id
     * @return 文件管理列表
     */
    List<FileManage> queryFileManageListByIds(@Param("fileIds")List<String> fileIds);

    /**
     * 批量修改文件状态
     *
     * @param businessId 业务id
     */
    void batchInvalidFile(String businessId);

    /**
     * 获取文件map
     *
     * @param businessType 业务类型
     * @return 文件map
     */
    Map<String, Map<String, String>> getFilePathMap(int businessType);

    /**
     * 获取待处理文件列表
     *
     * @return 待处理文件列表
     */
    List<FileManage> getPendingFiles();

    /**
     * 获取未关联文件列表
     *
     * @return 未关联文件列表
     */
    List<FileManage> getJunkFiles();

    /**
     * 获取需要推送文件列表
     *
     * @param businessType 业务类型
     * @return 需要推送文件列表
     */
    List<Map<String,String>> getNeedPushFile(int businessType);
}
